{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入相关包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "from transformers import AutoTokenizer, AutoModelForSequenceClassification\n",
    "from datasets import load_dataset\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载数据集合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dataset({\n",
      "    features: ['label', 'review'],\n",
      "    num_rows: 7765\n",
      "})\n"
     ]
    }
   ],
   "source": [
    "# dataset = load_dataset('csv', data_files={'train': 'D:/code/datasets/ChineseNlpCorpus/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv'})\n",
    "# print(dataset)\n",
    "dataset = load_dataset('csv', data_files='D:/code/datasets/ChineseNlpCorpus/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv',split='train')\n",
    "print(dataset)\n",
    "# dataset = dataset['train'].train_test_split(test_size=0.2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cf99378c1e3944409d61f6e492114f37",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Map:   0%|          | 0/6988 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7df67eed11344ac49e237c546bcca624",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Map:   0%|          | 0/777 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "datasets = dataset.train_test_split(test_size=0.1)\n",
    "# 创建dataloader\n",
    "import torch\n",
    "tokenizer = AutoTokenizer.from_pretrained('D:/code/models/huggingface/rbt3')\n",
    "def process_function(examples):\n",
    "    tokenizer_examples = tokenizer(examples['review'], truncation=True, max_length=128)\n",
    "    # tokenizer_examples = tokenizer(examples['review'], truncation=True, padding='max_length', max_length=128)\n",
    "    tokenizer_examples[\"labels\"] = examples['label']\n",
    "    return tokenizer_examples\n",
    "\n",
    "tokenizer_datasets = datasets.map(process_function, batched=True,remove_columns=datasets['train'].column_names)\n",
    "len(tokenizer_datasets['test']['input_ids'][0])\n",
    "\n",
    "from torch.utils.data import DataLoader \n",
    "# 这里才正式的开始进行padding操作\n",
    "from transformers import DataCollatorWithPadding\n",
    "\n",
    "trainset,valset  =  tokenizer_datasets['train'],tokenizer_datasets['test']\n",
    "train_loader = DataLoader(trainset, batch_size=32, shuffle=True, collate_fn=DataCollatorWithPadding(tokenizer=tokenizer))\n",
    "val_loader = DataLoader(valset, batch_size=64, shuffle=True, collate_fn=DataCollatorWithPadding(tokenizer=tokenizer))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 创建模型和优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of BertForSequenceClassification were not initialized from the model checkpoint at D:/code/models/huggingface/rbt3 and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
      "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
     ]
    }
   ],
   "source": [
    "from torch.optim import AdamW\n",
    "model =  AutoModelForSequenceClassification.from_pretrained('D:/code/models/huggingface/rbt3',num_labels=2)\n",
    "if torch.cuda.is_available():\n",
    "    model = model.cuda()\n",
    "\n",
    "optimizer =  AdamW(model.parameters(),lr=5e-5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估部分的简化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "path D:/code/evaluate-main/metrics/f1 None DownloadMode.REUSE_DATASET_IF_EXISTS\n",
      "path D:/code/evaluate-main/metrics/precision None DownloadMode.REUSE_DATASET_IF_EXISTS\n",
      "path D:/code/evaluate-main/metrics/recall None DownloadMode.REUSE_DATASET_IF_EXISTS\n"
     ]
    }
   ],
   "source": [
    "import evaluate\n",
    "# accuracy = evaluate.load(\"D:/code/evaluate-main/metrics/accuracy\")\n",
    "# res = accuracy.compute(references=[0,1,0,1], predictions=[1,0,0,1])\n",
    "# print(evaluate.load('accuracy').compute(references=[1], predictions=[1]))\n",
    "\n",
    "clf_metrics =  evaluate.combine(['D:/code/evaluate-main/metrics/f1','D:/code/evaluate-main/metrics/precision','D:/code/evaluate-main/metrics/recall'])\n",
    "# res\n",
    "# accuracy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练和验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_model():\n",
    "    model.eval()\n",
    "    with torch.inference_mode():\n",
    "        for batch in val_loader:\n",
    "            if torch.cuda.is_available():\n",
    "                batch = {k:v.cuda() for k,v in batch.items()}\n",
    "            output = model(**batch)\n",
    "            pred =  torch.argmax(output.logits,dim=-1)\n",
    "            # 预测batch的结果\n",
    "            clf_metrics.add_batch(predictions=pred.long(),references=batch['labels'].long())\n",
    "    # 最终拼接计算\n",
    "    return clf_metrics.compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "def save_model(model,tokenizer,epoch):\n",
    "    original_path = \"D:/code/models/classfication_rbt3/\"\n",
    "    path = os.path.join(original_path,'epoch_{}'.format(epoch))\n",
    "    if not os.path.exists(path):\n",
    "        os.makedirs(path)\n",
    "    model.save_pretrained(path)\n",
    "    tokenizer.save_pretrained(path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(epoch=5,log_step=100):\n",
    "    global_step = 0\n",
    "    for epoch in range(epoch):\n",
    "        print('epoch:{}'.format(epoch))\n",
    "        model.train()\n",
    "        for batch in train_loader:\n",
    "            if torch.cuda.is_available():\n",
    "                batch = {k:v.cuda() for k,v in batch.items()}\n",
    "            optimizer.zero_grad()\n",
    "            output = model(**batch)\n",
    "            output.loss.backward()\n",
    "            optimizer.step()\n",
    "            if global_step % log_step == 0:\n",
    "                print('epoch:{},step:{},loss:{}'.format(epoch,global_step,output.loss.item()))\n",
    "            global_step+=1  \n",
    "        acc = evaluate_model()\n",
    "        print('epoch:{},acc:{}'.format(epoch,acc))\n",
    "        save_model(model,tokenizer,epoch)\n",
    "    return acc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch:0\n",
      "epoch:0,step:0,loss:0.7150744795799255\n",
      "epoch:0,step:100,loss:0.2150929570198059\n",
      "epoch:0,step:200,loss:0.44542422890663147\n",
      "epoch:0,acc:{'f1': 0.9158699808795412, 'precision': 0.9264990328820116, 'recall': 0.9054820415879017}\n",
      "epoch:1\n",
      "epoch:1,step:300,loss:0.28491222858428955\n",
      "epoch:1,step:400,loss:0.07853730767965317\n",
      "epoch:1,acc:{'f1': 0.9150579150579151, 'precision': 0.9349112426035503, 'recall': 0.8960302457466919}\n",
      "epoch:2\n",
      "epoch:2,step:500,loss:0.2740287780761719\n",
      "epoch:2,step:600,loss:0.14221522212028503\n",
      "epoch:2,acc:{'f1': 0.9193697868396663, 'precision': 0.9018181818181819, 'recall': 0.9376181474480151}\n",
      "epoch:3\n",
      "epoch:3,step:700,loss:0.04167993366718292\n",
      "epoch:3,step:800,loss:0.21513015031814575\n",
      "epoch:3,acc:{'f1': 0.9163424124513619, 'precision': 0.9438877755511023, 'recall': 0.8903591682419659}\n",
      "epoch:4\n",
      "epoch:4,step:900,loss:0.016091231256723404\n",
      "epoch:4,step:1000,loss:0.005141085013747215\n",
      "epoch:4,acc:{'f1': 0.9148737137511693, 'precision': 0.9055555555555556, 'recall': 0.9243856332703214}\n"
     ]
    }
   ],
   "source": [
    "acc = train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'dict'> dict_keys(['f1', 'precision', 'recall'])\n"
     ]
    }
   ],
   "source": [
    "print(type(acc),acc.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估结果的可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "from evaluate.visualization import radar_plot\n",
    "data = [\n",
    "    acc\n",
    "]\n",
    "model_names = [\n",
    "    \"model 1\"\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\Miniconda\\envs\\geo\\lib\\site-packages\\evaluate\\visualization.py:47: UserWarning: Attempting to set identical low and high ylims makes transformation singular; automatically expanding.\n",
      "  ax.set_ylim(*ranges[j])\n",
      "d:\\Miniconda\\envs\\geo\\lib\\site-packages\\evaluate\\visualization.py:56: UserWarning: Attempting to set identical low and high ylims makes transformation singular; automatically expanding.\n",
      "  ax.set_ylim(*ranges[j])\n",
      "d:\\Miniconda\\envs\\geo\\lib\\site-packages\\evaluate\\visualization.py:124: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  sdata.append((d - y1) / (y2 - y1) * (x2 - x1) + x1)\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_421952\\1440059254.py:2: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.\n",
      "  plot.show()\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA40AAAHfCAYAAAD0jT3sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACMGElEQVR4nOzdd3jT5cI+8DtJNy1dlC5K926BUvYqpewpKuMgDlDUAzgAj68ej4PXrTgRPS5cgKCICsiS0jJkl9E9aUuBLuieaZPv7w/f5gcybOl48k3uz3VxiW3GHRpI7jxLIUmSBCIiIiIiIqIbUIoOQERERERERPqLpZGIiIiIiIhuiqWRiIiIiIiIboqlkYiIiIiIiG6KpZGIiIiIiIhuiqWRiIiIiIiIboqlkYiIiIiIiG6KpZGIiIiIiIhuiqWRiIiIiIiIboqlkcjInDhxAsOGDUO3bt2gUChw5swZ0ZGIiIiISI+xNBIZkaamJsyaNQtlZWV477338N1338HZ2RnPPPMMoqOjYWNjA4VCgfj4eNFRiYiIiEhPmIgOQERdJycnB/n5+fj888/x0EMPAQDi4+Px5ptvwt/fH+Hh4Thy5IjglERERESkTzjSSGRESkpKAAB2dna6r0VGRuLKlSvIzMzE8uXLBSUjIiIiIn3F0khkJB544AFERUUBAGbNmgWFQoHRo0fDxsYGDg4OgtMRERERkb7i9FQiI/HII4/A3d0dr732Gh5//HEMHDgQzs7OomMRERERkZ5jaSQyEkOHDkVjYyNee+01jBw5EnfffbfoSEREREQkA5yeSkRERERERDfF0khEREREREQ3xdJIREREREREN8XSSERERERERDfF0khEREREREQ3xd1TiQivvPIKACAlJQUA8N133+HQoUMAgP/85z/CchERERGReApJkiTRIYioa8THxyM6Oho//vjjNUduKBSKm16H/0QQERERGTeWRiIiIiIiIroprmkkIiIiIiKim2JpJCIiIiIioptiaSQiIiIiIqKbYmkkIiIiIiKim2JpJCIiIiIioptiaSQiIiIiIqKbYmkkIiIiIiKim2JpJCIiIiIioptiaSQiIiIiIqKbYmkkIiIiIiKim2JpJCIiIiIiopsyER2AiNpPkiQ0NDSguroa1dXVqKmpuea/V/++vr4eWq1W90uj0eDdd9/FQw89BHt7eyiV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c+cwa9YsrF69GiNGjBAdh4hIr4SGhmL9+vV48MEHcerUKdFxiIiICCyNXaqqqgrTp0/Hfffdh4ULF4qOQ0Skl6ZOnYrnn38eM2bMQHFxseg4RERERo+lsYtotVrMnz8fbm5uePvtt0XHISLSa08//TRGjRqFO++8E42NjaLjEBERGTWWxi7y/PPPIy0tjWcxEhG1gkKhwBdffAG1Wo1//vOf3FGViIhIIJbGLvD9999jzZo12Lp1K+zt7UXHISKSBUtLS/zyyy/YuXMnPvzwQ9FxiIiIjBaHvDpZQkICFi1ahB9++AHBwcGi4xARyYq7uzt++eUXjBkzBsHBwRg/frzoSEREREaHI42dqKioCDNmzMCLL76IyZMni45DRCRLgwcPxieffII5c+YgKytLdBwiIiKjw9LYSTQaDe655x6MHDkSTz31lOg4RESydt9992HBggWYNWsWGhoaRMchIiIyKiyNneT1119HQUEBPvvsMygUCtFxiIhk74033oC5uTk/iCMiIupiXNPYCQ4cOIDXX38dhw4dgo2Njeg4REQGwczMDBs3bkRERASio6Nx1113iY5ERERkFDjS2MFKS0vxj3/8A2+99RYiIiJExyEiMije3t748ssv8eCDDyI3N1d0HCIiIqPA0tiBtFot7r//fgwZMgSLFy8WHYeIyCDdddddmD9/PubOnQu1Wi06DhERkcFjaexA7777LtLS0vDll19yHSMRUSdatWoV1Go1/v3vf4uOQkREZPC4prGDHD16FC+88ALi4uJgZ2cnOg4RkUGzsLDApk2bMGDAAIwePRpTp04VHYmIiMhgcaSxA5SXl2Pu3Ll4+eWXMXjwYNFxiIiMQkBAAD755BPcf//9uHDhgug4REREBoulsQM8+uijCA0NxbJly0RHISIyKvfccw/uuOMOzJ8/H1qtVnQcIiIig8TS2E4//vgjYmNjsXbtWiiV/OMk+SstLYWbmxsUCgUUCgVUKhUefPDBVl134sSJUCqVuuva2tri6NGj111uwIABsLS01F2ue/fuHf0wyIh88MEHOH/+PNasWSM6ChERkUFiy2mHkpISLF68GGvWrIGzs7PoOEQdwsvLC4WFhXB2dsagQYMAAGvXrsXy5ctveb0BAwZg9+7dUKlU6N+/P9zd3VFVVYVhw4ahqKjomssmJCSgoaEBpqamnfY4yHhY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fDzy8vI6LRcRERkGnhNxC1FRUZg2bRqeeuop0VGIiKgdXnrpJQQHB2POnDmioxAREcmOiegA+u7tt99GUFAQ4uLiEB0dLToOERG1UVJSEj755BMkJCQY7EZm9fX1MDFp20v6559/Dq1W20mJiIjIkHTISGNtbW1H3IxecnNzw4svvoilS5eiqalJdBwiImoDSZKwdOlSLF26FCEhIaLjQKvVoqGhocNv18LCos2l0dTUlGcNExFRq7S5NL700ktQKBRITU3FvHnzYG9vjxEjRgAA1q1bh8jISFhaWsLBwQFz585FQUHBdbdx7NgxTJ48Gfb29ujWrRv69OmDDz74QPf9xMREPPDAA/Dx8YGFhQVcXFywcOFCXLlypR0P9fY9/vjjAIDVq1cLuX8iIro933//PbKzs/HCCy906O22vBamp6dj9uzZ6N69OxwdHfHEE09cUwoVCgWWLl2K9evXIzQ0FObm5ti1axcA4OLFi1i4cCGcnZ1hbm6O0NBQrF279rr7amhowEsvvYSAgABYWFjA1dUVd955J3Jycq65n6vXM1ZXV+PJJ5+El5cXzM3N0bNnT4wbNw6nTp3SXeaBBx7Q7QfQora2FitWrICHhwfMzc0RGBiIVatWXbeLcsvj+uWXXxAWFqbL3/LYiIjIsNz29NRZs2bB398fr732GiRJwquvvornn38es2fPxkMPPYTS0lKsXr0ao0aNwunTp2FnZwcA+P333zF16lS4urriiSeegIuLC9LS0rB9+3Y88cQTusucO3cOCxYsgIuLC1JSUvDZZ58hJSUFR48e7fLpRaamplizZg2mT5+OuXPnclMcIiIZqKqqwooVK/Dee+912m6ps2fPhpeXF15//XUcPXoUH374IcrLy/Htt9/qLrNv3z788MMPWLp0KXr06AEvLy8UFxdjyJAhuvLl5OSEnTt34sEHH0RVVRWefPJJAIBGo8HUqVMRGxuLuXPn4oknnkB1dTV+//13JCcnw9fX94a5Hn30UWzevFk3wnrlyhUcOnQIaWlp6N+//w2vI0kSpk+fjri4ODz44IPo168fdu/ejX/961+4ePEi3nvvvWsuf+jQIWzZsgWLFy+GjY0NPvzwQ9x11104f/48HB0dO+YPmIiI9IPURi+++KIEQPrHP/6h+1peXp6kUqmkV1999ZrLJiUlSSYmJrqvNzc3S97e3pKnp6dUXl5+zWW1Wq3u93V1ddfd7/fffy8BkA4cOKD72ldffSUBkHJzc3Vfi4qKkqKiotr6sFrlH//4hzRr1qxOuW0iIupYjz32mBQdHX3N60tHaXktnD59+jVfX7x4sQRAOnv2rCRJkgRAUiqVUkpKyjWXe/DBByVXV1fp8uXL13x97ty5kq2tre51cO3atRIA6d13370uw9WPC4D04osv6v7f1tZWWrJkyS0fw/333y95enrq/v+XX36RAEivvPLKNZe7++67JYVCIWVnZ19zf2ZmZtd87ezZsxIAafXq1be8XyIikp/bXtP46KOP6n6/ZcsWaLVazJ49G5cvX9b9cnFxgb+/P+Li4gAAp0+fRm5uLp588kndyGOLq0cPLS0tdb9vaGjA5cuXMWTIEAC4ZmpNV3vvvfewb98+/Pjjj8IyEBHR39u/fz/Wrl2Lzz77rFNnpyxZsuSa/3/ssccAADt27NB9LSoq6pr1lJIk4aeffsK0adMgSdI1r5sTJkxAZWWl7rXup59+Qo8ePXS3e7VbPS47OzscO3YMly5davVj2bFjB1QqlW5JRosVK1ZAkiTs3Lnzmq+PHTv2mpHOPn36oHv37jh37lyr75OIiOThtqenent7636flZUFSZLg7+9/w8uampoCgG79RVhY2C1vu6ysDCtXrsTGjRtRUlJyzfcqKytvN3K7OTs7Y82aNVi8eDGioqLQs2dPYVmIiOjGamtrsXDhQrz66qvw8/Pr1Pv66+uer68vlErlNWcfXv16CQClpaWoqKjAZ599hs8+++yGt9vy2peTk4PAwMA2b3Lz1ltv4f7774eHhwciIyMxefJk3HffffDx8bnpdfLz8+Hm5nbdVN7g4GDd96/Wu3fv627D3t4e5eXlbcpKRET677ZL49WjgVqtFgqFAjt37oRKpbrustbW1m267dmzZ+Pw4cP417/+hX79+sHa2hparRYTJ04Uvj347Nmz8eOPP2LJkiUccSQi0kPPPPMM3N3dbzg619luNPp39eslAN3r2Pz583H//fff8Hb69OnTrhyzZ8/GyJEj8fPPP2PPnj14++238eabb2LLli2YNGlSu267xY1e7wFct2kOERHJX4ec0+jr6wtJkuDt7Y2AgIBbXg4AkpOTMXbs2Btepry8HLGxsVi5cuU1u91lZWV1RNR2UygU+PjjjxEaGooffvgBs2fPFh2JiIj+T3x8PL766iucOXMGSmWHnCp1S1lZWdeMJGZnZ0Or1V63K+nVnJycYGNjA41Gc9PXwha+vr44duwYmpqadLN2WsvV1RWLFy/G4sWLUVJSgv79++PVV1+9aWn09PTE3r17UV1dfc1oY3p6uu77RERknDrkFfXOO++ESqXCypUrr/uEUZIk3VEZ/fv3h7e3N95//31UVFRcdzng/39y+dfbef/99zsiaofo2bMn1qxZgyVLllw3fZaIiMSoqanBwoUL8dprr3X6tNQWa9asueb/W45mutVonkqlwl133YWffvoJycnJ132/tLRU9/u77roLly9fxkcffXTd5W42oqfRaK5bytGzZ0+4ubmhsbHxprkmT54MjUZz3X299957UCgUHTZCSURE8tNhI42vvPIKnn32WeTl5eGOO+6AjY0NcnNz8fPPP+Phhx/GU089BaVSiU8++QTTpk1Dv379sGDBAri6uiI9PR0pKSnYvXs3unfvjlGjRuGtt95CU1MT3N3dsWfPHuTm5nZE1A7TMk118eLF+PHHH7v8GBAiIrrWM888Aw8PDyxdurTL7jM3NxfTp0/HxIkTceTIEaxbtw7z5s1D3759b3m9N954A3FxcRg8eDAWLVqEkJAQlJWV4dSpU9i7dy/KysoAAPfddx++/fZbLF++HMePH8fIkSNRW1uLvXv3YvHixZgxY8Z1t11dXY1evXrh7rvvRt++fWFtbY29e/fixIkTeOedd26aadq0aYiOjsZzzz2HvLw89O3bF3v27MGvv/6KJ5988qbHexARkeHrkNII/PliHRAQgPfeew8rV64EAHh4eGD8+PGYPn267nITJkxAXFwcVq5ciXfeeQdarRa+vr5YtGiR7jIbNmzAY489hjVr1kCSJIwfPx47d+7Uu/MR16xZo5umOmfOHNFxiIiMVlxcHL7++mucPXu2S6altti0aRNeeOEFPPPMMzAxMcHSpUvx9ttv/+31nJ2dcfz4cfzv//4vtmzZgo8//hiOjo4IDQ3Fm2++qbucSqXCjh078Oqrr2LDhg346aef4OjoiBEjRiA8PPyGt21lZYXFixdjz549ut3N/fz88PHHH+Of//znTTMplUps3boVL7zwAjZt2oSvvvoKXl5eePvtt7FixYq2/+EQEZHBUEhcsd4uP/74I/75z38iJSUFzs7OouMQERmdmpoahIeHY/ny5V22+c1LL72ElStXorS0FD169OiS+yQiIhKl6z6ONVCzZs1CTEwMFi5cKHxnVyIiY/TEE0/A09PzujMTiYiIqGOwNHaATz/9FCkpKXjvvfdERyEiMirr1q3Dr7/+inXr1nXptFQiIiJj0mFrGo2ZnZ0dNm7ciDFjxmDEiBEYPHiw6EhERAYvMzMTixcvxvfff49evXqJjkNERGSwuKaxA61atQofffQRTp8+DXt7e9FxiIgMVkNDA4YMGYKxY8di1apVouMQEREZNJbGDqTVajFt2jRYWFhg8+bNPIaDiKiTLF26FCdOnMDBgwdhZmYmOg4REZFB4wKQDqRUKvHNN9/g6NGj+Pjjj0XHISIySD/99BPWrVuHjRs3sjASERF1AY40doIDBw5g0qRJOHToECIiIkTHISIyGLm5uYiIiMCXX36Ju+66S3QcIiIio8DS2EleeeUVfPPNNzh16hRsbGxExyEikj21Wo2RI0di4MCB+Oijj0THISIiMhosjZ1Eo9Fg/Pjx6NmzJzZs2MD1jURE7bR8+XLExcXhyJEjsLCwEB2HiIjIaHBNYydRqVRYv349Dh06xJ39iIja6dtvv8VXX32FH374gYWRiIioi3GksZMlJCQgKioKP/zwAyZPniw6DhGR7Bw9ehQxMTH45ZdfMG7cONFxiIiIjA5HGjtZZGQkvvjiC/zjH/9AWlqa6DhERLJy8eJFzJw5E6+99hoLIxERkSAcaewizz33HH744QccP34c9vb2ouMQEem9+vp6jBo1Cn369MEXX3zBteFERESCsDR2Ea1WizvuuAMNDQ3YsWMHTExMREciItJbkiRh/vz5yMvLw759+2Bubi46EhERkdHi9NQuolQqsX79ely6dAn/+te/RMchItJrb731Fg4cOIAtW7awMBIREQnG4a4uZGNjg61bt2LgwIEIDw/HwoULRUciItI727dvx8svv4wDBw7A2dlZdBwiIiKjx+mpAsTFxWHq1KnYvXs3RowYIToOEZHeSElJwbBhw/D5559j9uzZouMQEREROD1ViOjoaLz77ruYPn06UlNTRcchItILBQUFmDhxIpYtW8bCSEREpEc40ijQiy++iLVr1+Lw4cPw8PAQHYeISJiysjKMGDECI0aMwKeffsqdUomIiPQIS6NAkiTh0UcfxaFDh3Dw4EE4ODiIjkRE1OXq6uowbtw49OzZEz/++CN3lyYiItIzLI2CaTQazJo1C8XFxfj9999hZWUlOhIRUZdpbm7GzJkzUVlZid27d8PS0lJ0JCIiIvoLrmkUTKVSYcOGDTAxMcGcOXPQ3NwsOhIRUZeQJAkPP/ww8vPzsXXrVhZGIiIiPcXSqAcsLCzw66+/Ij8/Hw8//DA4+EtExuC5557Dvn37sGvXLtjZ2YmOQ0RERDfB0qgn7OzssGvXLuzbtw/PPfec6DhERJ3qgw8+wGeffYbdu3fDzc1NdBwiIiK6Be42oEfc3Nywe/duDB8+HE5OTli2bJnoSEREHW7Dhg34z3/+g7179yIwMFB0HCIiIvobLI16JjAwEDt37sS4ceNgbm6OxYsXi45ERNRhfvzxRyxatAhbtmzB4MGDRcchIiKiVmBp1EMDBw7Ezp07MXHiRJiYmODhhx8WHYmIqN22bNmCBx54AD/++CMmTJggOg4RERG1Ekujnho6dCh+++03TJ48GSYmJli4cKHoSEREt+3XX3/Fvffei40bN2Ly5Mmi4xAREVEbsDTqsREjRmD79u2YMmUKFAoFFixYIDoSEVGbbdu2DfPmzcO6deswbdo00XGIiIiojVga9dyoUaOwbds2TJs2DRqNBg899JDoSERErfbzzz9j/vz5+O677zBz5kzRcYiIiOg2sDTKwOjRo7Fjxw5MmTIFzc3NePTRR0VHIiL6W5s3b8b999+PDRs2YMaMGaLjEBER0W1iaZSJkSNHYteuXZg0aRKam5uxdOlS0ZGIiG5q06ZNePDBB/HDDz9gypQpouMQERFRO7A0ysiwYcOwZ88eTJgwAVVVVXj22WehUChExyIiusYXX3yBJ598Eps3b8bEiRNFxyEiIqJ2UkiSJIkOQW1z9uxZTJw4EbNmzcL7778PpVIpOhIRESRJwquvvop33nkHv/76K0aNGiU6EhEREXUAlkaZys3NxYQJE9C/f3988803MDc3Fx2JiIyYRqPBE088gS1btmD37t0IDw8XHYmIiIg6CEujjJWWlmLy5MmwtbXFzz//DBsbG9GRiMgINTY24t5778XZs2exe/dueHl5iY5EREREHYjzGmXMyckJ+/btg1KpxOjRo1FcXCw6EhEZmaqqKkyePBn5+fk4dOgQCyMREZEBYmmUORsbG2zfvh2BgYEYPnw4zp07JzoSERmJoqIiREVFwdTUFLGxsXBychIdiYiIiDoBS6MBMDMzw7p16zBt2jQMGzYMp0+fFh2JiAxcdnY2hg8fjrCwMGzduhXW1taiIxEREVEnYWk0EEqlEu+++y6WLVuG0aNHY/v27aIjEZGBOnToEIYNG4Y77rgD33zzDczMzERHIiIiok7E0mhAFAoF/ud//gefffYZ5s6dizfffBPc54iIOtKXX36JCRMm4KWXXsKqVat45A8REZER4O6pBiohIQF33HEHRo0ahS+++AKWlpaiIxGRjDU3N2PFihVYv349fvzxR0RHR4uORERERF2EpdGAFRUV4c4770RTUxN++eUXuLu7i45ERDJUVlaGOXPmoKioCL/++it8fHxERyIiIqIuxHlFBszFxQVxcXEICwvDwIEDcezYMdGRiEhmUlNTMWjQIFhZWeHw4cMsjEREREaIpdHAmZubY+3atXj66acxZswYfPfdd6IjEZFMbN++HUOHDsXcuXPx888/w8bGRnQkIiIiEoDTU43Inj17MGfOHCxatAivv/46VCqV6EhEpIckScJbb72Fl19+GV9++SXmzJkjOhIREREJxNJoZDIzMzFjxgy4uLhg/fr1cHNzEx2JiPRIWVkZFi5ciFOnTuHnn39GZGSk6EhEREQkGKenGpmAgACcOHECnp6e6Nu3L3bt2iU6EhHpiSNHjiAiIgJarRanT59mYSQiIiIALI1GydraGl9//TVWrVqFWbNm4ZlnnkFTU5PoWEQkiFarxZtvvomxY8di2bJl+PXXX+Ho6Cg6FhEREekJTk81cunp6Zg9ezasra3x/fffw9PTU3QkIupCJSUluO+++5CVlYVNmzZhwIABoiMRERGRnuFIo5ELCgrCsWPH0LdvX0RERODXX38VHYmIukh8fDz69esHW1tbnDp1ioWRiIiIboilkWBpaYlPPvkE//3vf3HffffhiSeeQGNjo+hYRNRJNBoNVq5ciSlTpuDFF1/Exo0bYWtrKzoWERER6SlOT6Vr5OTkYM6cOdBoNPj666/Rt29f0ZGIqAPl5ORgwYIFKCkpwQ8//IA+ffqIjkRERER6jiONdA1fX18cPnwYU6dOxdChQ/G///u/3CSHyABotVqsXr0affv2Rd++fZGQkMDCSERERK3CkUa6qYSEBDzwwAMwNTXF119/zTeYRDKVk5OD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",
      "text/plain": [
       "<Figure size 640x480 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot =  radar_plot(data=data,model_names=model_names)\n",
    "plot.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
